package vista;

import modelo.Coordenada;
import titiritero.Posicionable;
import titiritero.SuperficieDeDibujo;
import titiritero.vista.ImagenAnimada;

public class VistaPersonaje extends ImagenAnimada {

	private Coordenada posicionAnterior; // para cambiar el frame automaticamente
	private int animacionCaminar; // se utiliza para la animacion de caminar
	private int estadoAlternativo; // se usa para cambiar el sprite al modo poder
	
	public VistaPersonaje(String archImagen, int w, int h) {
		super(archImagen, w, h);
		animacionCaminar = 0;
		estadoAlternativo = 0;
		setFrame(8);
	}
	
	public void cambiarAEstadoAlternativo (boolean estadoAlterno) {
		if(!estadoAlterno)
			estadoAlternativo = 0;
		else
			estadoAlternativo = 2;
	}
	
	public void dibujar(SuperficieDeDibujo superficeDeDibujo) {
		if(getNumTotalDeFrames()>=4)
			actualizarFrame();
		super.dibujar(superficeDeDibujo);
	}
	
	public void setPosicionable(Posicionable posicionable) {
		posicionAnterior = new Coordenada(posicionable.getX(), posicionable.getY());
		super.setPosicionable(posicionable);
	}
	
	public boolean seMovio() {
		return !((posicionAnterior.getX() == getPosicionable().getX())&&(posicionAnterior.getY() == getPosicionable().getY()));
	}
	
	private void actualizarFrame() {

		if (posicionAnterior.getY()>getPosicionable().getY()){ //arriba
			setFrame(estadoAlternativo+0+animacionCaminar);
		}
		else if (posicionAnterior.getY()<getPosicionable().getY()){ //abajo
			setFrame(estadoAlternativo+8+animacionCaminar);
		}
		else if (posicionAnterior.getX()<getPosicionable().getX()){ //derecha
			setFrame(estadoAlternativo+4+animacionCaminar);
		}
		else if (posicionAnterior.getX()>getPosicionable().getX()){ //izquierda
			setFrame(estadoAlternativo+12+animacionCaminar);
		}

		if(getNumTotalDeFrames()>=8) {
			if(animacionCaminar == 0) {
				animacionCaminar++; 
				setFrame(getFrame()+1);
			}
			else {
				animacionCaminar = 0; 
				setFrame(getFrame()-1);
			}
		}
		
		posicionAnterior.setCoordenadas(getPosicionable().getX(), getPosicionable().getY());
	}
}
